
/*
 * VentanaCarga.java
 *
 * Created on 20/05/2011, 10:41:23 AM
 */
package ventanas;

import recursos.Impresora;
import util.AdministradorDeConexiones;
import entidades.Empleados;
import java.sql.Connection;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import javax.swing.DefaultListModel;
import javax.swing.JOptionPane;
import recursos.CarnetLayout;
import util.Constantes;

/**
 *
 * @author lzielinski
 */
public class VentanaCarga extends javax.swing.JInternalFrame {

    // Atributo para manejar si hay una ventana abierta de este tipo
    public static boolean abierta = false;
    // Modelo de datos para lista de empleados
    DefaultListModel modeloEmpleados = new DefaultListModel();

    public VentanaCarga() {

        // Llama al constructor de la superclase y establece las caracteristicas de ventana
        super("Carga de carnets",
                true, //resizable
                true, //closable
                true, //maximizable
                true);//iconifiable

        // Establece en true el atributo abierto representando que hay una ventana de este tipo abierta
        abierta = true;

        initComponents();

        // Relaciona el modelo de empleados con la lista de empleados
        listUsuarios.setModel(modeloEmpleados);

        // Carga la lista con empleados
        CargarListaEmpleados();


    }

    public void limpiarFormulario() {
        txtApellido.setText("");
        txtCargo.setText("");
        txtDocIdent.setText("");
        getTxtLegajo().setText("");
        txtNombre.setText("");
    }

    public boolean validarFormulario() {

        // valida que el apellido no este vacio
        if (txtApellido.getText().equals("")) {
            JOptionPane.showMessageDialog(this, "El apellido no puede estar vacio!", "Guardar", JOptionPane.WARNING_MESSAGE);
            txtApellido.requestFocus();
            return false;
        }

        // valida que el nombre no este vacio
        if (txtNombre.getText().equals("")) {
            JOptionPane.showMessageDialog(this, "El nombre no puede estar vacio!", "Guardar", JOptionPane.WARNING_MESSAGE);
            txtNombre.requestFocus();
            return false;
        }

        // valida que el documento de identificacion no este vacio
        if (txtDocIdent.getText().equals("")) {
            JOptionPane.showMessageDialog(this, "El documento de indentificacion no puede estar vacio!", "Guardar", JOptionPane.WARNING_MESSAGE);
            txtDocIdent.requestFocus();
            return false;
        }

        // Valida que el numero de identificacion sea un numero entero
        try {
            Integer.parseInt(txtDocIdent.getText());
        } catch (Exception NumberFormatException) {
            JOptionPane.showMessageDialog(this, "El numero de identificacion debe ser un numero entero!", "Guardar", JOptionPane.WARNING_MESSAGE);
            txtDocIdent.requestFocus();
            return false;
        }

        // valida que el legajo no este vacio
        if (getTxtLegajo().getText().equals("")) {
            JOptionPane.showMessageDialog(this, "El numero de legajo no puede estar vacio!", "Guardar", JOptionPane.WARNING_MESSAGE);
            getTxtLegajo().requestFocus();
            return false;
        }

        // Valida que el legajo sea un numero entero
        try {
            Integer.parseInt(getTxtLegajo().getText());
        } catch (Exception NumberFormatException) {
            JOptionPane.showMessageDialog(this, "El legajo debe ser un numero entero!", "Guardar", JOptionPane.WARNING_MESSAGE);
            getTxtLegajo().requestFocus();
            return false;
        }

        // valida que el cargo no este vacio
        if (txtCargo.getText().equals("")) {
            JOptionPane.showMessageDialog(this, "El cargo no puede estar vacio!", "Guardar", JOptionPane.WARNING_MESSAGE);
            txtCargo.requestFocus();
            return false;
        }

        return true;
    }

    public void CargarListaEmpleados() {

        // Variables
        Connection c = null;

        try {
            // Obtiene la conexion
            c = AdministradorDeConexiones.getConnection();

            // Obtiene todos los empleados
            List empleados = Empleados.obtenerTodos(c);

            // Llena la lista de empleados
            getListUsuarios().setListData(new Vector(empleados));

        } catch (Exception e) {

            JOptionPane.showMessageDialog(this, "Disculpe, no se ha podido obtener los usuarios", "Error", JOptionPane.ERROR_MESSAGE);
            e.printStackTrace();
        } finally {
            if (c != null) {
                try {
                    c.close();
                } catch (Exception e) {
                }
            }
        }

    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        txtApellido = new javax.swing.JTextField();
        txtNombre = new javax.swing.JTextField();
        txtDocIdent = new javax.swing.JTextField();
        txtLegajo = new javax.swing.JTextField();
        txtCargo = new javax.swing.JTextField();
        jScrollPane1 = new javax.swing.JScrollPane();
        listUsuarios = new javax.swing.JList();
        btnNuevo = new javax.swing.JButton();
        btnGuardar = new javax.swing.JButton();
        btnEliminar = new javax.swing.JButton();
        btnCerrar = new javax.swing.JButton();
        btnImprimir = new javax.swing.JButton();
        jSeparator1 = new javax.swing.JSeparator();

        setEnabled(false);
        addInternalFrameListener(new javax.swing.event.InternalFrameListener() {
            public void internalFrameActivated(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameClosed(javax.swing.event.InternalFrameEvent evt) {
                formInternalFrameClosed(evt);
            }
            public void internalFrameClosing(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameDeactivated(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameDeiconified(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameIconified(javax.swing.event.InternalFrameEvent evt) {
            }
            public void internalFrameOpened(javax.swing.event.InternalFrameEvent evt) {
            }
        });

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Informacion usuario"));

        jLabel1.setText("Apellido:");

        jLabel2.setText("Nombre");

        jLabel3.setText("Doc. Ident:");

        jLabel4.setText("Legajo:");

        jLabel5.setText("Cargo:");

        txtApellido.setEnabled(false);
        txtApellido.setNextFocusableComponent(txtNombre);

        txtNombre.setEnabled(false);

        txtDocIdent.setEnabled(false);

        txtLegajo.setEnabled(false);

        txtCargo.setEnabled(false);

        listUsuarios.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                listUsuariosMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(listUsuarios);

        btnNuevo.setText("Nuevo");
        btnNuevo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnNuevoActionPerformed(evt);
            }
        });

        btnGuardar.setText("Guardar");
        btnGuardar.setEnabled(false);
        btnGuardar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnGuardarActionPerformed(evt);
            }
        });

        btnEliminar.setText("Eliminar");
        btnEliminar.setEnabled(false);
        btnEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEliminarActionPerformed(evt);
            }
        });

        btnCerrar.setText("Cerrar");
        btnCerrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCerrarActionPerformed(evt);
            }
        });

        btnImprimir.setText("Imprimir");
        btnImprimir.setEnabled(false);
        btnImprimir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnImprimirActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 623, Short.MAX_VALUE)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(btnNuevo)
                            .addComponent(jLabel1)
                            .addComponent(jLabel2)
                            .addComponent(jLabel3)
                            .addComponent(jLabel4)
                            .addComponent(jLabel5))
                        .addGap(18, 18, 18)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addComponent(btnGuardar)
                                .addGap(18, 18, 18)
                                .addComponent(btnEliminar))
                            .addComponent(txtNombre, javax.swing.GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE)
                            .addComponent(txtDocIdent, javax.swing.GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE)
                            .addComponent(txtLegajo, javax.swing.GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE)
                            .addComponent(txtCargo, javax.swing.GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE)
                            .addComponent(txtApellido, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE))
                        .addGap(18, 18, 18)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addComponent(btnImprimir)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 184, Short.MAX_VALUE)
                                .addComponent(btnCerrar))
                            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 245, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel1)
                            .addComponent(txtApellido, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(18, 18, 18)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel2)
                            .addComponent(txtNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(18, 18, 18)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel3)
                            .addComponent(txtDocIdent, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(18, 18, 18)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel4)
                            .addComponent(txtLegajo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(18, 18, 18)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel5)
                            .addComponent(txtCargo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 172, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(54, 54, 54)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnNuevo)
                    .addComponent(btnGuardar)
                    .addComponent(btnEliminar)
                    .addComponent(btnCerrar)
                    .addComponent(btnImprimir))
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnCerrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCerrarActionPerformed
        this.dispose();
    }//GEN-LAST:event_btnCerrarActionPerformed

    private void formInternalFrameClosed(javax.swing.event.InternalFrameEvent evt) {//GEN-FIRST:event_formInternalFrameClosed
        // Cuando cierra la ventana, establece 'abierto' en falso
        abierta = false;
    }//GEN-LAST:event_formInternalFrameClosed

    private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNuevoActionPerformed


        // No deja ningun item seleccionado en la lista
        getListUsuarios().clearSelection();

        // Limpia las cajas de texto
        limpiarFormulario();

        // Deshabilita boton 'nuevo'
        btnNuevo.setEnabled(false);

        // Deshabilita boton 'eliminar'
        btnEliminar.setEnabled(false);

        // Habilita boton 'guardar'
        btnGuardar.setEnabled(true);

        txtApellido.setEnabled(true);

        txtNombre.setEnabled(true);

        txtDocIdent.setEnabled(true);

        txtCargo.setEnabled(true);

        txtLegajo.setEnabled(true);

        // Ubica el curso en la primer caja de texto
        txtApellido.requestFocus();
    }//GEN-LAST:event_btnNuevoActionPerformed

    private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGuardarActionPerformed

        // Variables
        boolean esNuevo = true;

        // Valida el formulario
        boolean validacionOk = validarFormulario();

        // Si el formulario es valido, informa
        if (validacionOk) {

            // Instancia un Empleados
            Empleados a = new Empleados();

            // Si hay un item seleccionado lo obtiene
            if (getListUsuarios().getSelectedIndex() != -1) {
                a = (Empleados) getListUsuarios().getSelectedValue();
                esNuevo = false;
            }

            // Construye el Empleado
            a.setApellido((String) (txtApellido.getText()));
            a.setNombre((String) (txtNombre.getText()));
            a.setDni((String) (txtDocIdent.getText()));
            a.setCargo((String) (txtCargo.getText()));
            a.setLegajo((String) (getTxtLegajo().getText()));

            // Declara una variable del tipo Connection
            Connection conn = null;

            // Realiza la gestion con la base de datos
            try {

                // Obtiene la conexion
                conn = AdministradorDeConexiones.getConnection();

                // Si es un empleado nuevo lo inserta y agrega a la lista
                if (esNuevo) {

                    // Inserta el auto en la tabla
                    a.insertar(conn);

                    // Agrega el elemento a la lista
                    modeloEmpleados.addElement(a);
                } // Si no es un empleado nuevo lo modifica
                else {

                    // Modifica el empelado en la tabla
                    a.actualizar(conn);
                }

                txtApellido.setEnabled(false);

                txtNombre.setEnabled(false);

                txtDocIdent.setEnabled(false);

                txtCargo.setEnabled(false);

                txtLegajo.setEnabled(false);

            } catch (Exception e) {

                // Informa que la operacion no pudo ser realizada
                JOptionPane.showMessageDialog(this,
                        "La operacion no pudo ser realizada: " + e.getMessage(),
                        "Operacion",
                        JOptionPane.INFORMATION_MESSAGE);
                return;
            } finally {
                try {
                    CargarListaEmpleados();
                    conn.close();
                } catch (Exception e) {
                }
            }

            // Limpia el formulario
            limpiarFormulario();

            //  Desactiva boton 'guardar'
            btnGuardar.setEnabled(false);

            //  Desactiva boton 'eliminar'
            btnEliminar.setEnabled(false);

            // Activa boton 'nuevo'
            btnNuevo.setEnabled(true);

            // Activa el boton Imprimir
            btnImprimir.setEnabled(true);

            // Establece el foco en el boton 'nuevo'
            btnNuevo.requestFocus();

            // No deja ningun item seleccionado en la lista
            getListUsuarios().clearSelection();

            // Infoma OK!
            JOptionPane.showMessageDialog(this, "El empleado ha sido guardado!", "Guardar", JOptionPane.INFORMATION_MESSAGE);

        }

    }//GEN-LAST:event_btnGuardarActionPerformed

    private void listUsuariosMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_listUsuariosMouseClicked

        // Activa el boton 'eliminar'
        btnEliminar.setEnabled(true);

        // Activa el boton Imprimir
        btnImprimir.setEnabled(true);

        // Obtiene el item seleccionado
        Empleados a = (Empleados) getListUsuarios().getSelectedValue();

        // Completa las cajas de texto segun el elemento
        txtApellido.setText(String.valueOf(a.getApellido()));
        txtCargo.setText(String.valueOf(a.getCargo()));
        txtDocIdent.setText(String.valueOf(a.getDni()));
        getTxtLegajo().setText(String.valueOf(a.getLegajo()));
        txtNombre.setText(String.valueOf(a.getNombre()));




    }//GEN-LAST:event_listUsuariosMouseClicked

    private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEliminarActionPerformed

        for (int i = 0; i <= modeloEmpleados.size(); i++) {

            //System.out.println(modeloEmpleados);

        }

        // Si hay un elemento seleccionado, lo elimina
        if (getListUsuarios().getSelectedIndex() != -1) {

            // Consulta si desea eliminar el item
            int rta = JOptionPane.showConfirmDialog(this,
                    "Desea eliminar el Empleado " + getListUsuarios().getSelectedValue() + " ?",
                    "Eliminar",
                    JOptionPane.YES_NO_OPTION);

            // Si no desea borrarlo, entonces no lo borra
            if (rta == JOptionPane.NO_OPTION) {
                return;
            }

            //////////////

            // Obtiene el item seleccionado
            Empleados a = (Empleados) getListUsuarios().getSelectedValue();

            // Declara una variable del tipo Connection
            Connection conn = null;
            try {

                // Obtiene la conexion
                conn = AdministradorDeConexiones.getConnection();
                a.eliminar(conn);

            } catch (Exception e) {
            } finally {
                CargarListaEmpleados();
                try {
                    conn.close();
                } catch (Exception e) {
                }
            }
            //////////////

            // Elimina el Empleado
            //modeloEmpleados.remove((listUsuarios.getSelectedIndex()));

            // Deshabilita el boton 'eliminar'
            btnEliminar.setEnabled(false);

            // Deshabilita el boton 'guardar'
            btnGuardar.setEnabled(false);

            // Limpia el formulario
            limpiarFormulario();

            // Informa que el auto ha sido eliminado
            JOptionPane.showMessageDialog(this,
                    "El Empleado ha sido eliminado!",
                    "Eliminar",
                    JOptionPane.INFORMATION_MESSAGE);
        }
    }//GEN-LAST:event_btnEliminarActionPerformed

    private void btnImprimirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnImprimirActionPerformed

        btnImprimir.setEnabled(false);

        CarnetLayout c = new CarnetLayout(txtApellido.getText(), txtNombre.getText(),
                txtDocIdent.getText(), txtLegajo.getText(), txtCargo.getText(),
                txtLegajo.getText());

        Impresora imp; // declaracion del objeto imp sin inicializar
        String cadena = c.getCadena1() + c.getCadena2() + c.getCadena3()
                + c.getCadena4() + c.getCadena5() + c.getCadenaImg();

        if (!cadena.equals("")) {
            imp = new Impresora();
            imp.imprimir(c);
        } else {
            System.out.println("NO SE IMPRIME NADA EN BLANCO...");
        }


    }//GEN-LAST:event_btnImprimirActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnCerrar;
    private javax.swing.JButton btnEliminar;
    private javax.swing.JButton btnGuardar;
    private javax.swing.JButton btnImprimir;
    private javax.swing.JButton btnNuevo;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JList listUsuarios;
    private javax.swing.JTextField txtApellido;
    private javax.swing.JTextField txtCargo;
    private javax.swing.JTextField txtDocIdent;
    private javax.swing.JTextField txtLegajo;
    private javax.swing.JTextField txtNombre;
    // End of variables declaration//GEN-END:variables

    public javax.swing.JTextField getTxtLegajo() {
        return txtLegajo;
    }

    public javax.swing.JList getListUsuarios() {
        return listUsuarios;
    }
}
